package cc.autoapi.pucong.auto.flow.core.root.utils;

import lombok.Data;

/**
 * @author pucong
 * @date 2020/5/19 17:16
 */
@Data
public class Res<T> {

    private static final long serialVersionUID = 915079455546890857L;

    // 返回编码
    private String code;

    // 返回消息
    private String msg;

    // 返回数据
    private T data;

    public Res(){

    }

    public Res(String code,String msg){
        this.code = code;
        this.msg = msg;
        this.data = null;
    }

    public Res(String code,String msg,T data){
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    /**
     * 操作错误信息
     * @return 返回status=500,操作信息="未知异常，请联系管理员"，返回数据=""的结果
     */
    public static Res error() {
        return custom(SystemConstant.CODE_ERROR, SystemConstant.MSG_ERROR, SystemConstant.DATA_DEFAULT);
    }

    /**
     * 操作错误信息
     * @return 返回status=500,操作信息=msg，返回数据=""的结果
     */
    public static Res error(String msg) {
        return custom(SystemConstant.CODE_ERROR, msg, SystemConstant.DATA_DEFAULT);
    }

    /**
     * 操作成功信息
     * @return 返回status=200,操作信息="操作成功"，返回数据=""的结果
     */
    public static Res ok() {
        return custom(SystemConstant.CODE_STRING_OK, SystemConstant.MSG_OK, SystemConstant.DATA_DEFAULT);
    }

    /**
     * 操作成功信息
     * @return 返回status=200,操作信息="操作成功"，返回数据=data的结果
     */
    public static Res ok(Object data) {
        return custom(SystemConstant.CODE_STRING_OK, SystemConstant.MSG_OK, data);
    }

    /**
     * 自定义操作信息
     * @param status 操作结果编码
     * @param msg 操作结果描述
     * @param data 操作结果数据
     * @return Res
     */
    public static Res custom (String status, String msg, Object data) {
        Res res = new Res(status,msg,data);
        return res;
    }

    /**
     * 自定义操作信息
     * @param status 操作结果编码
     * @param msg 操作结果描述
     * @return
     */
    public static Res custom (String status, String msg) {
        Res res = new Res(status,msg);
        return res;
    }
    /**
     * 自定义操作信息
     * @param status 操作结果编码
     * @param data 操作结果数据
     * @return Res
     */
    public static Res custom (String status, Object data) {
        Res res = new Res(status,"",data);
        return res;
    }

    /**
     * 自定义操作信息
     * @param status 操作结果编码
     * @return Res
     */
    public static Res custom (String status) {
        Res res = new Res(status,"");
        return res;
    }

    @Override
    public String toString() {
        return "{" +
                "code:" + this.code + "," +
                "msg:\"" + this.msg + "\"," +
                "data:'" + this.data +
                "'}";
    }
}
